package com.demo.system.controller;

import com.demo.common.entity.ChatMessage;
import com.demo.system.service.ChatMessageService;
import com.demo.system.service.impl.MyWebSocketHandler;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 聊天消息控制器
 * <p>
 * 提供聊天消息相关的REST API接口，主要功能包括：
 * 1. 聊天消息的CRUD操作
 * 2. 与WebSocket处理器的集成，支持消息广播
 * 3. 跨域访问支持，便于前端调用
 * <p>
 * 该控制器与WebSocket功能紧密集成，可以通过HTTP接口触发WebSocket消息推送，
 * 实现多种消息通知方式的统一管理。
 *
 * @author why
 * @since 2025-09-23 10:12:41
 */
@RestController  // 标记为REST控制器，自动将返回值序列化为JSON
@RequestMapping("/chatMessage")  // 设置控制器的基础路径
@CrossOrigin  // 启用跨域访问支持，允许前端跨域调用
@RequiredArgsConstructor  // Lombok注解，自动生成带final字段的构造函数
public class ChatMessageController {

    /**
     * 聊天消息业务服务层
     * 负责聊天消息的业务逻辑处理，如消息存储、查询、删除等操作
     */
    private final ChatMessageService chatMessageService;

    /**
     * WebSocket消息处理器
     * 提供WebSocket消息发送和广播功能，实现实时消息推送
     */
    private final MyWebSocketHandler webSocketHandler;

    /**
     * 消息广播接口
     * <p>
     * 通过HTTP POST请求触发WebSocket消息广播功能。
     * 这个接口提供了一种通过REST API方式发送WebSocket消息的方法，
     * 可以用于系统集成、定时任务触发消息推送等场景。
     * <p>
     * 使用场景：
     * 1. 管理后台推送系统公告
     * 2. 定时任务发送系统通知
     * 3. 第三方系统集成消息推送
     *
     * @param message 要广播的消息内容
     * @return 响应结果，包含操作状态信息
     */
    @PostMapping("/broadcast")
    public ResponseEntity<String> broadcast(@RequestBody String message) {
        // TODO: 实现消息广播逻辑
        // 可以在这里调用 webSocketHandler.broadcastMessage(message) 进行消息广播
        // 目前代码被注释，需要根据具体业务需求实现

        return ResponseEntity.ok("消息已广播");
    }

}
